From: Chong Yidong Date: Fri, 25 Mar 2011 20:00:25 +0000 (-0400) Subject: Discard changes to buffer->clip_changed incurred during fontification. X-Git-Tag: archive/raspbian/1%29.2+1-2+rpi1~1^2~324^2~4295 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:/?a=commitdiff_plain;h=7a3b308beafb1d12863690c2a866901e8aa2d0b5;p=emacs.git Discard changes to buffer->clip_changed incurred during fontification. * src/xdisp.c (handle_fontified_prop): Discard changes to clip_changed incurred during fontification. --- diff --git a/src/ChangeLog b/src/ChangeLog index 07580922bb2..ced28558ddd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-03-25 Chong Yidong + + * xdisp.c (handle_fontified_prop): Discard changes to clip_changed + incurred during fontification. + 2011-03-25 Juanma Barranquero * buffer.c (defvar_per_buffer): Remove unused parameter `doc'. diff --git a/src/xdisp.c b/src/xdisp.c index 457a5e3e11b..cc5d61abdb2 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -3164,6 +3164,9 @@ handle_fontified_prop (struct it *it) { int count = SPECPDL_INDEX (); Lisp_Object val; + struct buffer *obuf = current_buffer; + int begv = BEGV, zv = ZV; + int old_clip_changed = current_buffer->clip_changed; val = Vfontification_functions; specbind (Qfontification_functions, Qnil); @@ -3209,6 +3212,23 @@ handle_fontified_prop (struct it *it) unbind_to (count, Qnil); + /* Fontification functions routinely call `save-restriction'. + Normally, this tags clip_changed, which can confuse redisplay + (see discussion in Bug#6671). Since we don't perform any + special handling of fontification changes in the case where + `save-restriction' isn't called, there's no point doing so in + this case either. So, if the buffer's restrictions are + actually left unchanged, reset clip_changed. */ + if (obuf == current_buffer) + { + if (begv == BEGV && zv == ZV) + current_buffer->clip_changed = old_clip_changed; + } + /* There isn't much we can reasonably do to protect against + misbehaving fontification, but here's a fig leaf. */ + else if (!NILP (BVAR (obuf, name))) + set_buffer_internal_1 (obuf); + /* The fontification code may have added/removed text. It could do even a lot worse, but let's at least protect against the most obvious case where only the text past `pos' gets changed',